package com.alks.function.example.sync;

import com.alks.common.utils.DatabaseUtils.DatabaseUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class SyncDataToPcVCostTtl {

    //定时时间
    // 每天执行一次，即24小时的毫秒数
    private static final long INTERVAL = 24 * 60 * 60 * 1000;
    private static final String INSERT_SQL = "INSERT INTO PC_V_COST_TTL (column1, column2, column3) VALUES (?, ?, ?)";

    public static void main(String[] args) {
        Timer timer = new Timer();

        //设定每天一次
        // 获取当前时间
        Date currentTime = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentTime);
        // 设置定时任务执行时间为每天的固定时间（这里设置为凌晨1点）
        calendar.set(Calendar.HOUR_OF_DAY, 1);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        // 如果当前时间已经过了设定的执行时间，就将执行时间设置为明天
        if (currentTime.after(calendar.getTime())) {
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        Date firstTime = calendar.getTime();

//        timer.schedule(new SyncTask(), 0, INTERVAL);
        // 执行定时任务
        timer.schedule(new SyncTask(), firstTime, INTERVAL);
    }

    static class SyncTask extends TimerTask {
        @Override
        public void run() {
            // 这里放置定时执行的同步任务代码
            conn();
            System.out.println("正在执行同步任务...");
        }
    }

    public static void conn() {
        Connection conn = null;

        try {
            // 连接数据库
            conn = DatabaseUtils.getConnection();

            // 执行联合查询
            ResultSet rs = DatabaseUtils.executeQuery(conn,
                    "SELECT column1, column2, column3 FROM your_union_query_result"
            );

            // 遍历查询结果，并将数据写入新表
            while (rs.next()) {
                DatabaseUtils.executeInsert(conn, INSERT_SQL,
                        rs.getString("column1"),
                        rs.getString("column2"),
                        rs.getString("column3"));
            }

            System.out.println("同步任务成功完成");
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
